package ar.com.digitalbricks.view.imprenta.helper;

import java.util.ArrayList;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashSet;

import ar.com.digitalbricks.imprenta.general.enums.Dia;
import ar.com.digitalbricks.imprenta.persona.Contacto;
import ar.com.digitalbricks.imprenta.persona.MedioComunicacion;
import ar.com.digitalbricks.imprenta.persona.enums.Horario;
import ar.com.digitalbricks.view.imprenta.general.EnumView;

public class ContactoView {
	private Integer id;
	private Integer randomId;
	private String nombre;
	private String seccion;
	private Collection<TelefonoView> telefonos;
	private String mail;
	private String telefonoPrincipal;
	private Collection<DiaAtencionItemView> calendario;
	private String params;

	public ContactoView() {}

	public ContactoView(Contacto contacto) {
		this.id = contacto.getId();
		this.nombre = contacto.getNombre();
		this.seccion = contacto.getSeccion();
		this.mail = contacto.getMail();
		for (MedioComunicacion medioComunicacion : contacto.getMediosComunicacion()) {
			this.getTelefonos().add(new TelefonoView(medioComunicacion));
			if (medioComunicacion.getIsPrincipal()){
				this.telefonoPrincipal = medioComunicacion.getDescripcion();
			}
		}
		this.params = "idContacto_|_"+this.id;
	}

	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getSeccion() {
		return seccion;
	}
	public void setSeccion(String seccion) {
		this.seccion = seccion;
	}
	public String getMail() {
		return mail;
	}
	public void setMail(String mail) {
		this.mail = mail;
	}
	public String getTelefonoPrincipal() {
		for (TelefonoView telefonoView : this.getTelefonos()) {
			if (telefonoView.getIsPrincipal()){
				this.telefonoPrincipal = telefonoView.getTipo().getDescription() + ": " + telefonoView.getNumero().toString();
			}
		}
		return this.telefonoPrincipal;
	}
	public void setTelefonoPrincipal(String telefonoPrincipal) {
		this.telefonoPrincipal = telefonoPrincipal;
	}
	public Collection<TelefonoView> getTelefonos() {
		if (this.telefonos == null){
			this.telefonos = new HashSet<TelefonoView>();
		}
		return this.telefonos;
	}
	public void setTelefonos(Collection<TelefonoView> telefonos) {
		this.telefonos = telefonos;
	}
	
	public void setCalendario(Collection<DiaAtencionItemView> calendario) {
		this.calendario = calendario;
	}

	public Collection<DiaAtencionItemView> getCalendario() {
		if (this.calendario == null){
			this.calendario = this.createCalendarioEstandar();
		}
		return this.calendario;
	}

	@SuppressWarnings("unchecked")
	private Collection<DiaAtencionItemView> createCalendarioEstandar() {
		Collection<DiaAtencionItemView> calendario = new ArrayList<DiaAtencionItemView>();
		for (Enum aEnum : EnumSet.allOf(Dia.class)){
			DiaAtencionItemView dia = new DiaAtencionItemView();
			dia.setDia(new EnumView(aEnum));
			if (aEnum.equals(Dia.DOMINGO) || aEnum.equals(Dia.SABADO)){
				dia.setHoras(this.createDiaSinAtencion());
			}else{
				dia.setHoras(this.createDiaEstandar());
			}
			calendario.add(dia);
		}
		return calendario;
	}

	@SuppressWarnings("unchecked")
	private Collection<HoraView> createDiaEstandar() {
		Collection<HoraView> horas = new ArrayList<HoraView>();
		for (Enum aEnum : EnumSet.allOf(Horario.class)){
			HoraView hora = new HoraView((Horario) aEnum);
			hora.setAtiende(true);
			horas.add(hora);
		}
		return horas;
	}
	
	@SuppressWarnings("unchecked")
	private Collection<HoraView> createDiaSinAtencion() {
		Collection<HoraView> horas = new ArrayList<HoraView>();
		for (Enum aEnum : EnumSet.allOf(Horario.class)){
			HoraView hora = new HoraView((Horario) aEnum);
			hora.setAtiende(false);
			horas.add(hora);
		}
		return horas;
	}

	public void addTelefono(TelefonoView telefonoView) {
		this.getTelefonos().add(telefonoView);
	}

	public void setRandomId(Integer randomId) {
		this.randomId = randomId;
		this.params = "idRandom_|_"+randomId;
	}

	public Integer getRandomId() {
		return this.randomId;
	}

	public void setParams(String params) {
		this.params = params;
	}

	public String getParams() {
		return this.params;
	}
}